<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--
    1：内存溢出
        * 当程序运行需要的内存超过了剩余的内存时，就会抛出程序溢出(是一种程序运行出现的错误)

    2：内存泄露
        * 占用的内存没有及时释放
        * 内存泄露积累过多就容易导致内存溢出
        * 常见的内存泄露：
            - 意外的全局变量
            - 没有及时清理计时器或回调函数
            - 闭包
-->
</body>
<script>
    // 内存溢出
    {
        var arr = []
        for (let i = 0; i < 10000000000; i++) {
            arr[i] = i
        }
        console.log(arr)
    }
    //内存泄露
    {
        //   1：意外的全局变量
        function name() {
            a = 10
            console.log(a)
        }

        name()//本来调用函数执行后 就应该释放，但是a不小心定义成了全局变量 所以a不能释放


        // 2：计时器
        var timer = setInterval(function () {
            console.log("----")
        })
        clearInterval(timer)//如果不清理就会导致内存泄露

        // 3:闭包
        function fn1() {
            //这里就产生了闭包(由于函数提升)
            var a = 2

            function fn2() {
                a++
                console.log(a)
            }

            return fn2
        }

        var f = fn1()
        f()
        f=null   //如果不清理就会导致内存泄露
    }
</script>
</html>